package lg.minecraft.plugin.pokemonmenu.config.builder;

import lg.minecraft.plugin.cobblemoncore.util.PokemonPlaceholderReplacer;
import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;

import java.util.List;
import java.util.Map;

/**
 * 根据条件切换材质并构建 ItemStack。
 */
public class DynamicMaterialItemBuilder {

    private final Material trueMaterial;  // 当条件为 true 时使用的材质
    private final Material falseMaterial; // 当条件为 false 时使用的材质
    private final String name;            // 显示名称（可含占位符）
    private final List<String> lore;      // 描述文本（可含占位符）

    public DynamicMaterialItemBuilder(Material trueMaterial, Material falseMaterial, String name, List<String> lore) {
        this.trueMaterial = trueMaterial;
        this.falseMaterial = falseMaterial;
        this.name = name;
        this.lore = lore;
    }

    /**
     * 构建 ItemStack。
     *
     * @param map 用于替换占位符的数据
     * @param condition 条件：true 使用 trueMaterial 并附魔，false 使用 falseMaterial 不附魔
     * @return 构建好的 ItemStack
     */
    public ItemStack build(Map<String, String> map, boolean condition) {
        Material material = condition ? trueMaterial : falseMaterial;
        ItemStack stack = new ItemStack(material);
        ItemMeta meta = stack.getItemMeta();

        if (meta != null) {
            // 添加附魔（仅当 condition 为 true 时）
            if (condition) {
                meta.addEnchant(Enchantment.UNBREAKING, 1, true);
            }

            // 替换名称与描述中的占位符
            meta.setDisplayName(PokemonPlaceholderReplacer.replacePlaceholders(name, map));
            meta.setLore(PokemonPlaceholderReplacer.replacePlaceholders(lore, map));

            // 隐藏所有默认属性
            meta.addItemFlags(ItemFlag.values());

            stack.setItemMeta(meta);
        }

        return stack;
    }

}
